package com.flyme.module.file.provider.utils;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import com.aliyun.vod.upload.impl.UploadImageImpl;
import com.aliyun.vod.upload.impl.UploadM3u8FileImpl;
import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadFileStreamRequest;
import com.aliyun.vod.upload.req.UploadImageRequest;
import com.aliyun.vod.upload.req.UploadLocalM3u8Request;
import com.aliyun.vod.upload.req.UploadStreamRequest;
import com.aliyun.vod.upload.req.UploadURLStreamRequest;
import com.aliyun.vod.upload.req.UploadVideoRequest;
import com.aliyun.vod.upload.req.UploadWebM3u8Request;
import com.aliyun.vod.upload.resp.*;

/**
 * 以下Java示例代码演示了如何在服务端上传媒资文件至视频点播，媒资类型支持音频、视频和图片。
 * <p>
 * 一、音视频上传目前支持4种方式上传： 1.上传本地文件，使用分片上传，并支持断点续传，参见testUploadVideo函数。 1.1
 * 当断点续传关闭时，最大支持上传任务执行时间为3000秒，具体可上传文件大小与您的网络带宽及磁盘读写能力有关。 1.2
 * 当断点续传开启时，最大支持48.8TB的单个文件，注意，断点续传开启后，上传任务执行过程中，同时会将当前上传位置写入本地磁盘文件，影响您上传文件的速度，请您根据文件大小选择是否开启
 * 2.上传网络流，可指定文件URL进行上传，不支持断点续传，最大支持5GB的单个文件。参见testUploadURLStream函数。
 * 3.上传文件流，可指定本地文件进行上传，不支持断点续传，最大支持5GB的单个文件。参见testUploadFileStream函数。
 * 4.流式上传，可指定输入流进行上传，支持文件流和网络流等，不支持断点续传，最大支持5GB的单个文件。参见testUploadStream函数。
 * <p>
 * 二、图片上传目前支持2种方式上传： 1.上传本地文件，不支持断点续传，最大支持5GB的单个文件，参见testUploadImageLocalFile函数
 * 2.上传文件流和网络流，InputStream参数必选，不支持断点续传，最大支持5GB的单个文件。参见testUploadImageStream函数。
 * 注：图片上传完成后，会返回图片ID和图片地址，也可通过GetImageInfo查询图片信息，参见接口文档
 * https://help.aliyun.com/document_detail/89742.html
 * <p>
 * 三、m3u8文件上传目前支持2种方式： 1.上传本地m3u8音视频文件（包括所有分片文件）到点播，需指定本地m3u8索引文件地址和所有分片地址。
 * 2.上传网络m3u8音视频文件（包括所有分片文件）到点播，需指定m3u8索引文件和分片文件的URL地址。
 * <p>
 * 四、上传进度回调通知：
 * 1.默认上传进度回调函数：视频点播上传SDK内部默认开启上传进度回调函数，输出不同事件通知的日志，您可以设置关闭该上传进度通知及日志输出；
 * 2.自定义上传进度回调函数：您可根据自已的业务场景重新定义不同事件处理的方式，只需要修改上传回调示例函数即可。
 * <p>
 * 注意： 1) 请替换示例中的必选参数，示例中的可选参数如果您不需要设置，请将其删除，以免设置无效参数值与您的预期不符。 2)
 * m3u8文件上传暂不支持进度回调
 */

public class AliVodUtil {
	// 账号AK信息请填写(必选)
	private static final String accessKeyId = "LTAITwwT7b13wJ6u";
	// 账号AK信息请填写(必选)
	private static final String accessKeySecret = "9aBCPmQZ28DFDUQRu7TG1KmRihFwVw";

	public static void main(String[] args) {
		String title = "测试标题";
		String fileName = "E:/te.mp4";
		//uploadVideo(title, fileName);
		// 待上传视频的网络流地址
		//String url = "http://test.aliyun.com/video/test.mp4";
		// testUploadURLStream(accessKeyId, accessKeySecret, title, fileName,url);
		// 3.文件流上传
		// testUploadFileStream(accessKeyId, accessKeySecret, title, fileName);
		// 4.流式上传，如文件流和网络流
		InputStream inputStream = null;
		// 4.1 文件流
		try {
			inputStream = new FileInputStream(fileName);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		testUploadStream(title, fileName, inputStream);
		// 4.2 网络流

		/*try {
			inputStream = new URL(url).openStream();
		} catch (IOException e) {
			e.printStackTrace();
		}*/
		

		// 二、图片上传

		// 1.图片上传-本地文件上传
		// testUploadImageLocalFile(accessKeyId, accessKeySecret);

		// 2.图片上传-流式上传(文件流和网络流)
		// testUploadImageStream(accessKeyId, accessKeySecret);

		// 三、m3u8文件上传

		// 1.上传本地m3u8音视频文件
		// testUploadLocalM3u8(accessKeyId, accessKeySecret);
		// 2.上传网络m3u8音视频文件
		// testUploadWebM3u8(accessKeyId, accessKeySecret);
	}

	/**
	 * 本地文件上传接口
	 * @param title
	 * @param fileName
	 */
	public static UploadVideoResponse uploadVideo(String title, String fileName) {
		UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);
		/* 可指定分片上传时每个分片的大小，默认为2M字节 */
		request.setPartSize(2 * 1024 * 1024L);
		/* 可指定分片上传时的并发线程数，默认为1，(注：该配置会占用服务器CPU资源，需根据服务器情况指定） */
		request.setTaskNum(5);
		/*
		 * 是否开启断点续传, 默认断点续传功能关闭。当网络不稳定或者程序崩溃时，再次发起相同上传请求，可以继续未完成的上传任务，
		 * 适用于超时3000秒仍不能上传完成的大文件。 注意:
		 * 断点续传开启后，会在上传过程中将上传位置写入本地磁盘文件，影响文件上传速度，请您根据实际情况选择是否开启
		 */
		// request.setEnableCheckpoint(false);
		/*
		 * OSS慢请求日志打印超时时间，是指每个分片上传时间超过该阈值时会打印debug日志，如果想屏蔽此日志，请调整该阈值。单位:
		 * 毫秒，默认为300000毫秒
		 */
		// request.setSlowRequestsThreshold(300000L);
		/* 可指定每个分片慢请求时打印日志的时间阈值，默认为300s */
		// request.setSlowRequestsThreshold(300000L);
		/* 是否显示水印(可选)，指定模板组ID时，根据模板组配置确定是否显示水印 */
		// request.setIsShowWaterMark(true);
		/*
		 * 设置上传完成后的回调URL(可选)，建议您通过点播控制台配置事件通知，参见文档
		 * https://help.aliyun.com/document_detail/55627.html
		 */
		// request.setCallback("http://callback.sample.com");
		/*
		 * 自定义消息回调设置(可选)，参数说明参考文档
		 * https://help.aliyun.com/document_detail/86952.html#UserData
		 */
		// request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://test.test.com\"}}");
		/* 视频分类ID(可选) */
		// request.setCateId(0);
		/* 视频标签,多个用逗号分隔(可选) */
		// request.setTags("标签1,标签2");
		/* 视频描述(可选) */
		// request.setDescription("视频描述");
		/* 封面图片(可选) */
		// request.setCoverURL("http://cover.sample.com/sample.jpg");
		/* 模板组ID(可选) */
		// request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56a33d");
		/* 工作流ID(可选) */
		// request.setWorkflowId("d4430d07361f0*be1339577859b0177b");
		/* 存储区域(可选) */
		// request.setStorageLocation("in-201703232118266-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
		/* 开启默认上传进度回调 */
		// request.setPrintProgress(false);
		/* 设置自定义上传进度回调 (必须继承 VoDProgressListener) */
		request.setProgressListener(new MyPutObjectProgressListener());
		UploadVideoImpl uploader = new UploadVideoImpl();
		UploadVideoResponse response = uploader.uploadVideo(request);
		if (response.isSuccess()) {
			printVideo(response);
		}
		return response;
	}

	/**
	 * 待上传视频的网络流地址
	 * @param accessKeyId
	 * @param accessKeySecret
	 * @param title
	 * @param fileName
	 * @param url "http://test.aliyun.com/video/test.mp4"
	 */
	private static void testUploadURLStream(String accessKeyId, String accessKeySecret, String title, String fileName,
			String url) {
		UploadURLStreamRequest request = new UploadURLStreamRequest(accessKeyId, accessKeySecret, title, fileName, url);
		/* 是否显示水印(可选)，指定模板组ID时，根据模板组配置确定是否显示水印 */
		// request.setShowWaterMark(true);
		/*
		 * 设置上传完成后的回调URL(可选)，建议通过点播控制台配置消息监听事件，参见文档
		 * https://help.aliyun.com/document_detail/55627.html
		 */
		// request.setCallback("http://callback.sample.com");
		/*
		 * 自定义消息回调设置(可选)，参数说明参考文档
		 * https://help.aliyun.com/document_detail/86952.html#UserData
		 */
		// request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://test.test.com\"}}");
		/* 视频分类ID(可选) */
		// request.setCateId(0);
		/* 视频标签,多个用逗号分隔(可选) */
		// request.setTags("标签1,标签2");
		/* 视频描述(可选) */
		// request.setDescription("视频描述");
		/* 封面图片(可选) */
		// request.setCoverURL("http://cover.sample.com/sample.jpg");
		/* 模板组ID(可选) */
		// request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56a33d");
		/* 工作流ID(可选) */
		// request.setWorkflowId("d4430d07361f0*be1339577859b0177b");
		/* 存储区域(可选) */
		// request.setStorageLocation("in-201703232118266-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
		/* 开启默认上传进度回调 */
		// request.setPrintProgress(true);
		/* 设置自定义上传进度回调 (必须继承 VoDProgressListener) */
		// request.setProgressListener(new MyPutObjectProgressListener());
		UploadVideoImpl uploader = new UploadVideoImpl();
		UploadURLStreamResponse response = uploader.uploadURLStream(request);
		printVideo(response);
	}

	/**
	 * 文件流上传接口
	 *
	 * @param accessKeyId
	 * @param accessKeySecret
	 * @param title
	 * @param fileName
	 */
	private static void testUploadFileStream(String accessKeyId, String accessKeySecret, String title,
			String fileName) {
		UploadFileStreamRequest request = new UploadFileStreamRequest(accessKeyId, accessKeySecret, title, fileName);
		/* 是否使用默认水印(可选)，指定模板组ID时，根据模板组配置确定是否使用默认水印 */
		// request.setShowWaterMark(true);
		/*
		 * 设置上传完成后的回调URL(可选)，建议通过点播控制台配置消息监听事件，参见文档
		 * https://help.aliyun.com/document_detail/57029.html
		 */
		// request.setCallback("http://callback.sample.com");
		/*
		 * 自定义消息回调设置，参数说明参考文档
		 * https://help.aliyun.com/document_detail/86952.html#UserData
		 */
		// request.setUserData(""{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://test.test.com\"}}"");
		/* 视频分类ID(可选) */
		// request.setCateId(0);
		/* 视频标签,多个用逗号分隔(可选) */
		// request.setTags("标签1,标签2");
		/* 视频描述(可选) */
		// request.setDescription("视频描述");
		/* 封面图片(可选) */
		// request.setCoverURL("http://cover.sample.com/sample.jpg");
		/* 模板组ID(可选) */
		// request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56a33d");
		/* 工作流ID(可选) */
		// request.setWorkflowId("d4430d07361f0*be1339577859b0177b");
		/* 存储区域(可选) */
		// request.setStorageLocation("in-201703232118266-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
		/* 开启默认上传进度回调 */
		// request.setPrintProgress(true);
		/* 设置自定义上传进度回调 (必须继承 VoDProgressListener) */
		// request.setProgressListener(new MyPutObjectProgressListener());
		UploadVideoImpl uploader = new UploadVideoImpl();
		UploadFileStreamResponse response = uploader.uploadFileStream(request);
		printVideo(response);
	}

	/**
	 * 流式上传接口
	 *
	 * @param title
	 * @param fileName
	 * @param inputStream
	 */
	public static void testUploadStream(String title, String fileName,InputStream inputStream) {
		UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName,
				inputStream);
		/* 是否使用默认水印(可选)，指定模板组ID时，根据模板组配置确定是否使用默认水印 */
		// request.setShowWaterMark(true);
		/*
		 * 设置上传完成后的回调URL(可选)，建议通过点播控制台配置消息监听事件，参见文档
		 * https://help.aliyun.com/document_detail/57029.html
		 */
		// request.setCallback("http://callback.sample.com");
		/*
		 * 自定义消息回调设置，参数说明参考文档
		 * https://help.aliyun.com/document_detail/86952.html#UserData
		 */
		// request.setUserData(""{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://test.test.com\"}}"");
		/* 视频分类ID(可选) */
		// request.setCateId(0);
		/* 视频标签,多个用逗号分隔(可选) */
		// request.setTags("标签1,标签2");
		/* 视频描述(可选) */
		// request.setDescription("视频描述");
		/* 封面图片(可选) */
		// request.setCoverURL("http://cover.sample.com/sample.jpg");
		/* 模板组ID(可选) */
		// request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56a33d");
		/* 工作流ID(可选) */
		// request.setWorkflowId("d4430d07361f0*be1339577859b0177b");
		/* 存储区域(可选) */
		// request.setStorageLocation("in-201703232118266-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
		/* 开启默认上传进度回调 */
		// request.setPrintProgress(true);
		/* 设置自定义上传进度回调 (必须继承 VoDProgressListener) */
		request.setProgressListener(new MyPutObjectProgressListener());
		UploadVideoImpl uploader = new UploadVideoImpl();
		UploadStreamResponse response = uploader.uploadStream(request);
		printVideo(response);
	}

	/**
	 * 图片上传接口，本地文件上传示例 参数参考文档 https://help.aliyun.com/document_detail/55619.html
	 *
	 * @param accessKeyId
	 * @param accessKeySecret
	 */
	private static void testUploadImageLocalFile(String accessKeyId, String accessKeySecret) {
		/* 图片类型（必选）取值范围：default（默认)，cover（封面），watermark（水印） */
		String imageType = "cover";
		UploadImageRequest request = new UploadImageRequest(accessKeyId, accessKeySecret, imageType);
		request.setImageType("cover");
		/* 图片文件扩展名（可选）取值范围：png，jpg，jpeg */
		// request.setImageExt("png");
		/* 图片标题（可选）长度不超过128个字节，UTF8编码 */
		// request.setTitle("图片标题");
		/* 图片标签（可选）单个标签不超过32字节，最多不超过16个标签，多个用逗号分隔，UTF8编码 */
		// request.setTags("标签1,标签2");
		/* 存储区域（可选） */
		// request.setStorageLocation("out-4f3952f78c0211e8b3020013e7.oss-cn-shanghai.aliyuncs.com");
		/* 流式上传时，InputStream为必选，fileName为源文件名称，如:文件名称.png(可选) */
		String fileName = "/Users/demo/png/test.png";
		request.setFileName(fileName);
		/* 开启默认上传进度回调 */
		// request.setPrintProgress(false);
		/* 设置自定义上传进度回调 (必须继承 VoDProgressListener) */
		// request.setProgressListener(new MyPutObjectProgressListener());
		UploadImageImpl uploadImage = new UploadImageImpl();
		UploadImageResponse response = uploadImage.upload(request);
		print(response);

	}

	/**
	 * 图片上传接口，流式上传示例（支持文件流和网络流） 参数参考文档
	 * https://help.aliyun.com/document_detail/55619.html
	 *
	 * @param accessKeyId
	 * @param accessKeySecret
	 */
	private static void testUploadImageStream(String accessKeyId, String accessKeySecret) {
		/* 图片类型（必选）取值范围：default（默认)，cover（封面），watermark（水印） */
		String imageType = "cover";
		UploadImageRequest request = new UploadImageRequest(accessKeyId, accessKeySecret, imageType);
		/* 图片文件扩展名（可选）取值范围：png，jpg，jpeg */
		// request.setImageExt("png");
		/* 图片标题（可选）长度不超过128个字节，UTF8编码 */
		// request.setTitle("图片标题");
		/* 图片标签（可选）单个标签不超过32字节，最多不超过16个标签，多个用逗号分隔，UTF8编码 */
		// request.setTags("标签1,标签2");
		/* 存储区域（可选） */
		// request.setStorageLocation("out-4f3952f78c0211e8b3020013e7.oss-cn-shanghai.aliyuncs.com");
		/* 流式上传时，InputStream为必选，fileName为源文件名称，如:文件名称.png(可选) */
		// request.setFileName("测试文件名称.png");
		/* 开启默认上传进度回调 */
		// request.setPrintProgress(true);
		/* 设置自定义上传进度回调 (必须继承 VoDProgressListener) */
		// request.setProgressListener(new MyPutObjectProgressListener());

		// 1.文件流上传
		// InputStream fileStream = getFileStream(request.getFileName());
		// if (fileStream != null) {
		// request.setInputStream(fileStream);
		// }

		// 2.网络流上传
		String url = "http://test.aliyun.com/image/default/test.png";
		InputStream urlStream = getUrlStream(url);
		if (urlStream != null) {
			request.setInputStream(urlStream);
		}

		// 开始上传图片
		UploadImageImpl uploadImage = new UploadImageImpl();
		UploadImageResponse response = uploadImage.upload(request);
		print(response);
	}

	/**
	 * 图片上传接口，流式上传示例（支持文件流和网络流） 参数参考文档
	 * https://help.aliyun.com/document_detail/55619.html
	 *
	 * @param accessKeyId
	 * @param accessKeySecret
	 */
	private static void testUploadLocalM3u8(String accessKeyId, String accessKeySecret) {
		String title = "test_upload_web_m3u8";
		String m3u8Filename = "/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/cc38da35c7b24de0abe58619cdd7a8-6479a12446b994719838e0307f6458-ld.m3u8";
		UploadLocalM3u8Request request = new UploadLocalM3u8Request(accessKeyId, accessKeySecret, title, m3u8Filename);
		String[] sliceFilenames = new String[] {
				"/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/slices/cc38da35c7b24de0abe58619cdd7a896-c45797a1ad6e75fbb9d1a84937034742-ld-00001.ts",
				"/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/slices/cc38da35c7b24de0abe58619cdd7a896-c45797a1ad6e75fbb9d1a84937034742-ld-00002.ts",
				"/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/slices/cc38da35c7b24de0abe58619cdd7a896-c45797a1ad6e75fbb9d1a84937034742-ld-00003.ts",
				"/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/slices/cc38da35c7b24de0abe58619cdd7a896-c45797a1ad6e75fbb9d1a84937034742-ld-00004.ts",
				"/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/slices/cc38da35c7b24de0abe58619cdd7a896-c45797a1ad6e75fbb9d1a84937034742-ld-00005.ts",
				"/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/slices/cc38da35c7b24de0abe58619cdd7a896-c45797a1ad6e75fbb9d1a84937034742-ld-00006.ts",
				"/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/slices/cc38da35c7b24de0abe58619cdd7a896-c45797a1ad6e75fbb9d1a84937034742-ld-00007.ts",
				"/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/slices/cc38da35c7b24de0abe58619cdd7a896-c45797a1ad6e75fbb9d1a84937034742-ld-00008.ts",
				"/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/slices/cc38da35c7b24de0abe58619cdd7a896-c45797a1ad6e75fbb9d1a84937034742-ld-00009.ts",
				"/Users/test/0e9ecfc6da934d1887ed7bdfc925ecf5/slices/cc38da35c7b24de0abe58619cdd7a896-c45797a1ad6e75fbb9d1a84937034742-ld-00010.ts" };
		// ts分片文件列表，可选，不指定时，直接解析m3u8FileURL获取分片地址
		request.setSliceFilenames(sliceFilenames);
		/* 可指定分片上传时每个分片的大小，默认为2M字节 */
		request.setPartSize(2 * 1024 * 1024L);
		/* 可指定分片上传时的并发线程数，默认为1，(注：该配置会占用服务器CPU资源，需根据服务器情况指定） */
		request.setTaskNum(1);
		/* 是否显示水印(可选)，指定模板组ID时，根据模板组配置确定是否显示水印 */
		// request.getShowWaterMark(true);
		/*
		 * 设置上传完成后的回调URL(可选)，建议您通过点播控制台配置事件通知，参见文档
		 * https://help.aliyun.com/document_detail/55627.html
		 */
		// request.setCallback("http://callback.sample.com");
		/*
		 * 自定义消息回调设置(可选)，参数说明参考文档
		 * https://help.aliyun.com/document_detail/86952.html#UserData
		 */
		// request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://test.test.com\"}}");
		/* 视频分类ID(可选) */
		// request.setCateId(-1L);
		/* 视频标签,多个用逗号分隔(可选) */
		// request.setTags("标签1,标签2");
		/* 视频描述(可选) */
		// request.setDescription("视频描述");
		/* 封面图片(可选) */
		// request.setCoverURL("http://cover.sample.com/sample.jpg");
		/* 模板组ID(可选) */
		// request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56a33d");
		/* 工作流ID(可选) */
		// request.setWorkflowId("d4430d07361f0*be1339577859b0177b");
		/* 存储区域(可选) */
		// request.setStorageLocation("in-201703232118266-5sejdln9o.oss-cn-shanghai.aliyuncs.com");

		UploadM3u8FileImpl uploadM3u8File = new UploadM3u8FileImpl();
		UploadLocalM3u8Response uploadLocalM3u8Response = uploadM3u8File.uploadLocalM3u8(request);
		System.out.println("code = " + uploadLocalM3u8Response.getCode());
		System.out.println("message = " + uploadLocalM3u8Response.getMessage());
		System.out.println("videoId = " + uploadLocalM3u8Response.getVideoId());
		System.out.println("requestId = " + uploadLocalM3u8Response.getRequestId());
	}

	/**
	 * 图片上传接口，流式上传示例（支持文件流和网络流） 参数参考文档
	 * https://help.aliyun.com/document_detail/55619.html
	 *
	 * @param accessKeyId
	 * @param accessKeySecret
	 */
	private static void testUploadWebM3u8(String accessKeyId, String accessKeySecret) {
		String title = "test_upload_web_m3u8";
		String m3u8FileURL = "http://test.aliyun.com/f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-538087dcf2c201c31ce4324bf76af691-ld.m3u8";
		UploadWebM3u8Request request = new UploadWebM3u8Request(accessKeyId, accessKeySecret, title, m3u8FileURL);
		String[] sliceFileURLs = new String[] {
				"https://out-***.oss-cn-shanghai.aliyuncs.com/83f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-822598b9c170a8c6dad985e20cd9c27d-ld-00001.ts",
				"https://out-***.oss-cn-shanghai.aliyuncs.com/f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-822598b9c170a8c6dad985e20cd9c27d-ld-00002.ts",
				"https://out-***.oss-cn-shanghai.aliyuncs.com/f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-822598b9c170a8c6dad985e20cd9c27d-ld-00003.ts",
				"https://out-***.oss-cn-shanghai.aliyuncs.com/f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-822598b9c170a8c6dad985e20cd9c27d-ld-00004.ts",
				"https://out-***.oss-cn-shanghai.aliyuncs.com/f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-822598b9c170a8c6dad985e20cd9c27d-ld-00005.ts",
				"https://out-***.oss-cn-shanghai.aliyuncs.com/f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-822598b9c170a8c6dad985e20cd9c27d-ld-00006.ts",
				"https://out-***.oss-cn-shanghai.aliyuncs.com/f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-822598b9c170a8c6dad985e20cd9c27d-ld-00007.ts",
				"https://out-***.oss-cn-shanghai.aliyuncs.com/f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-822598b9c170a8c6dad985e20cd9c27d-ld-00008.ts",
				"https://out-***.oss-cn-shanghai.aliyuncs.com/f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-822598b9c170a8c6dad985e20cd9c27d-ld-00009.ts",
				"https://out-***.oss-cn-shanghai.aliyuncs.com/f0d644abc547129e957b386f772c72/a0e1e2817ab9425aa558fe67a90e717f-822598b9c170a8c6dad985e20cd9c27d-ld-00010.ts" };
		// ts分片地址，可选，不指定时，直接解析m3u8FileURL获取分片地址
		// request.setSliceFileURLs(sliceFileURLs);
		/* 可指定分片上传时每个分片的大小，默认为2M字节 */
		request.setPartSize(2 * 1024 * 1024L);
		/* 可指定分片上传时的并发线程数，默认为1，(注：该配置会占用服务器CPU资源，需根据服务器情况指定） */
		request.setTaskNum(1);
		/* 是否显示水印(可选)，指定模板组ID时，根据模板组配置确定是否显示水印 */
		// request.setShowWaterMark(true);
		/*
		 * 自定义消息回调设置(可选)，参数说明参考文档
		 * https://help.aliyun.com/document_detail/86952.html#UserData
		 */
		// request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://test.test.com\"}}");
		/* 视频分类ID(可选) */
		// request.setCateId(-1L);
		/* 视频标签,多个用逗号分隔(可选) */
		// request.setTags("标签1,标签2");
		/* 视频描述(可选) */
		// request.setDescription("视频描述");
		/* 封面图片(可选) */
		// request.setCoverURL("http://cover.sample.com/sample.jpg");
		/* 模板组ID(可选) */
		// request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56a33d");
		/* 工作流ID(可选) */
		// request.setWorkflowId("d4430d07361f0*be1339577859b0177b");
		/* 存储区域(可选) */
		// request.setStorageLocation("in-201703232118266-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
		UploadM3u8FileImpl uploadM3u8File = new UploadM3u8FileImpl();
		UploadWebM3u8Response uploadWebM3u8Response = uploadM3u8File.uploadWebM3u8(request);
		System.out.println("code = " + uploadWebM3u8Response.getCode());
		System.out.println("message = " + uploadWebM3u8Response.getMessage());
		System.out.println("videoId = " + uploadWebM3u8Response.getVideoId());
		System.out.println("requestId = " + uploadWebM3u8Response.getRequestId());
	}

	private static InputStream getFileStream(String fileName) {
		try {
			return new FileInputStream(fileName);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}

	private static InputStream getUrlStream(String url) {
		try {
			return new URL(url).openStream();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	private static void print(UploadImageResponse response){
		if (response.isSuccess()) {
			System.out.print("ImageId=" + response.getImageId() + "\n");
			System.out.print("ImageURL=" + response.getImageURL() + "\n");
		} else {
			System.out.print("ErrorCode=" + response.getCode() + "\n");
			System.out.print("ErrorMessage=" + response.getMessage() + "\n");
		}
	}
	/*
	 * 如果设置回调URL无效，不影响视频上传，可以返回VideoId同时会返回错误码。其他情况上传失败时，VideoId为空，
	 * 此时需要根据返回错误码分析具体错误原因
	 */
	private  static  void printVideo(BaseResponse response){
		System.out.print("RequestId=" + response.getRequestId() + "\n"); // 请求视频点播服务的请求ID
		if (response.isSuccess()) {
			System.out.print("VideoId=" + response.getVideoId() + "\n");
		} else {
			System.out.print("VideoId=" + response.getVideoId() + "\n");
			System.out.print("ErrorCode=" + response.getCode() + "\n");
			System.out.print("ErrorMessage=" + response.getMessage() + "\n");
		}
	}
}